home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Games Machine 76
/
XENIATGM66.iso
/
Indiana Jones
/
Indiana Jones.exe
/
RESOURCE
/
PREVIEW.GOB
/
cog_actor_robotguard.cog
< prev
next >
Wrap
Text File
|
1999-11-15
|
6KB
|
243 lines
# Jones 3D Cog Script
#
# actor_RobotSm.cog
#
# Special case behavior for the Guard (door) Robot
#
# [MDR]
#
# (C) 1999 LucasArts Entertainment Co. All Rights Reserved
# ========================================================================================
symbols
message startup
message created
message user0
message aievent
message damaged
message killed
message timer
# *********************** SUBROUTINES **************************
flex RobotTakeOff local
flex RobotLand local
# ************************** TEMPLATES *************************
template tpl_glow=+robotglow_md local
# *********************** MISC LOCAL VARS **********************
thing t_sender local
thing t_glow local
int eventType local
flex f_userData local
int n_damageType local
int TIMERID_POWERUP=1 local
int FLAG_ACTIVATED local
int FLAG_POWERINGUP local
vector vec_pos local
end
# ========================================================================================
code
# ........................................................................................
startup:
FLAG_ACTIVATED = 0x20;
FLAG_POWERINGUP = 0x40;
return;
# ........................................................................................
created:
t_sender = GetSenderRef();
SetArmedMode(t_sender, 7); # Switch to non-active armed mode
ClearPhysicsFlags(t_sender, 0x2000); # Clear PF_FLY
SetPhysicsFlags(t_sender, 0x0001); # Set PF_USEGRAVITY
AISetCutsceneMode(t_sender); # Disable AI until USER0 activated.
SetActorFlags(t_sender, 0x00100008); # Set AF_INVULNERABLE and AF_NOTARGET
SetActorFlags(t_sender, 0x40000); # Set AF_IMMOBILE
AISetMode(t_sender, 0x8000000); # Set MODE_ARMOREDSKIN
AISetMode(t_sender, 0x10000); # Set MODE_WANTALLEVENTS
AISetMode(t_sender, 0x2000000); # Set MODE_NOCHASING
SetThingUserData(t_sender, 0);
return;
# ........................................................................................
user0:
t_sender = GetParam(0);
f_userData = GetThingUserData(t_sender);
if ( !BITTEST(f_userData, FLAG_ACTIVATED) )
{
f_userData = BITSET(f_userData, FLAG_ACTIVATED); # Set "activated" flag
f_userData = BITSET(f_userData, FLAG_POWERINGUP); # Set "powering up" flag
SetThingUserData(t_sender, f_userData); # Record flag settings
ClearActorFlags(t_sender, 0x00100008); # Clear AF_INVULNERABLE and AF_NOTARGET
ClearActorFlags(t_sender, 0x40000); # Clear AF_IMMOBILE
ClearPhysicsFlags(t_sender, 0x0001); # Clear PF_USEGRAVITY
vec_pos = VectorTransformToOrient(t_sender, '0.0 0.15 0');
AISetMovePos(t_sender, VectorAdd(GetThingPos(t_sender), vec_pos), 0);
SetTimerEx(1.0, TIMERID_POWERUP, t_sender, 0);
}
return;
# ........................................................................................
timer:
if ( GetSenderID() == TIMERID_POWERUP )
{
t_sender = GetParam(0);
f_userData = GetThingUserData(t_sender);
f_userData = BITCLEAR(f_userData, FLAG_POWERINGUP); # Clear "powering up" flag
SetThingUserData(t_sender, f_userData); # Record flag settings
call RobotTakeOff;
AIClearCutsceneMode(t_sender); # Enable AI's instincts
AISetLookThing(t_sender, GetLocalPlayerThing());
}
return;
# ........................................................................................
aievent:
eventType = GetParam(0);
t_sender = GetSenderRef();
f_userData = GetThingUserData(t_sender);
if ( BITTEST(eventType, 0x100e04) ) #---- EVENT_HIT(Something)
{
if ( BITTEST(f_userData, FLAG_POWERINGUP) ) # If powering up, ignore it
{
ReturnEx(1);
return;
}
}
if ( BITTEST(f_userData, FLAG_POWERINGUP) ) # If powering up, not "in play" yet
return;
if ( eventType == 0x40 ) #---- EVENT_MOVETARGETCHANGED
{
if ( AIGetArmedMode(t_sender) == 7 ) # Non-active armed mode?
{
call RobotTakeOff;
}
}
if ( BITTEST(eventType, 0x80800 ) ) #---- EVENT_GOAL(UNREACHABLE|REACHED)
{
if ( !BITTEST(AIGetMode(t_sender), 0x202) )
{
call RobotLand;
}
}
SetThingUserData(t_sender, f_userData); # Record flag settings
return;
# ........................................................................................
damaged:
n_damageType = GetParam(1);
if ( BITTEST(n_damageType, 0x18) ) # DAMAGE_(FISTS|WHIP)?
{
ReturnEx(0);
}
return;
# ........................................................................................
killed:
t_sender = GetSenderRef();
t_glow = GetThingAttachedThing(t_sender, 13);
if ( t_glow > -1 )
{
DestroyThing(t_glow);
}
return;
# ===================================================================
# Subroutines
# ===================================================================
# ........................................................................................
# Assumes t_sender and f_userData have been set
# ........................................................................................
RobotTakeOff:
SetArmedMode(t_sender, 0); # Switch to active armed mode
PlaySoundClass(t_sender, 131); # Play activated sound
PlaySoundClass(t_sender, 123); # Play hover sound
SetPhysicsFlags(t_sender, 0x2000); # Set PF_FLY
ClearPhysicsFlags(t_sender, 0x0001); # Clear PF_USEGRAVITY
vec_pos = VectorAdd( GetThingPos(t_sender), '0 0 -0.10' );
t_glow = CreateThingAtPos(tpl_glow, FindNewSectorFromThing(t_sender, vec_pos), vec_pos, '0 0 0');
if ( t_glow > -1 )
{
AttachThingToThingEx(t_glow, t_sender, 0x08);
}
return;
# ........................................................................................
# Assumes t_sender and f_userData have been set
# ........................................................................................
RobotLand:
ResetThing(t_sender);
SetArmedMode(t_sender, 7); # Switch to non-active armed mode
StopSoundClass(t_sender, 123); # Stop hover sound
ClearPhysicsFlags(t_sender, 0x2000); # Clear PF_FLY
SetPhysicsFlags(t_sender, 0x0001); # Set PF_USEGRAVITY
t_glow = GetThingAttachedThing(t_sender, 13);
if ( t_glow > -1 )
{
DestroyThing(t_glow);
}
return;
end